package com.hsgene.authority.service;

import com.hsgene.authority.constants.AccountPermissionCondition;
import com.hsgene.authority.dto.OperationAccountPermissionDto;
import com.hsgene.authority.dto.OperationPermissionTree;
import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.Pagination;

import java.util.List;

/**
 * 运营管理权限Service
 *
 * @author wangbing
 * @version 1.0, 2018/11/6
 */
public interface OperationAccountPermissionService {

    /**
     * 查询指定部门权限
     *
     * @param departmentId    部门id
     * @param trimCommon      是否需要修剪通用权限
     * @param trimNotSelected 是否修剪未选中的权限
     * @return 部门权限
     */
    ApiResult<OperationPermissionTree> findDepartmentPermission(String departmentId, boolean trimCommon, boolean trimNotSelected);

    /**
     * 获取超级管理员权限
     *
     * @return 超管权限
     */
    ApiResult<OperationPermissionTree> getSystemSuperPermission();

    /**
     * 更新某个部门的权限
     *
     * @param departmentId 部门id
     * @param ids          选中的权限id
     * @return 更新结果
     */
    ApiResult<NullObject> updateDepartmentPermission(String departmentId, List<String> ids);

    /**
     * 初始化部门权限
     *
     * @param departmentId 部门id
     * @param initType     初始化类型（init：新增初始化，clear：删除初始化）
     * @return 更新结果
     */
    ApiResult<NullObject> initDepartmentPermission(String departmentId, String initType);

    /**
     * 分页查询部门拥有权限
     *
     * @param condition   查询条件
     * @param limitHelper 分页条件
     * @return 权限信息
     */
    ApiResult<Pagination<OperationAccountPermissionDto>> queryPermissions(
            AccountPermissionCondition condition, LimitHelper limitHelper);

    /**
     * 刷新所有部门权限
     */
    void refreshAllDepartmentPermission();

    /**
     * 刷新指定部门权限
     *
     * @param departmentId 部门id
     */
    void refreshDepartmentPermission(String departmentId);

    /**
     *
     * @param permissionId
     * @param containParent
     * @param containChildren
     * @return
     */
    ApiResult<OperationPermissionTree> findPermission(String userId, String permissionId, boolean containParent, boolean containChildren);
}
